package com.g4.shoppingsingle.service.impl;

import com.g4.shoppingsingle.mapper.DdCommentInfoMapper;
import com.g4.shoppingsingle.pojo.DdCommentInfo;
import com.g4.shoppingsingle.service.DdCommentInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;

@Service
@Slf4j
@CacheConfig(cacheNames = "commentInfo")
public class DdCommentInfoImpl implements DdCommentInfoService {
    @Autowired
    private DdCommentInfoMapper ddCommentInfoMapper;

    /**
     * 添加评论
     * @param ddCommentInfo
     */
    @Override
    @Transactional//开启事务
    public void addComment(DdCommentInfo ddCommentInfo) {
        //添加状态,未删除状态为true
        ddCommentInfo.setDeleteState(true);
        ddCommentInfoMapper.insert(ddCommentInfo);
        ddCommentInfo.setUserName(ddCommentInfoMapper.getUsername(ddCommentInfo.getId()));

        //更新缓存,如果缓存内该key的值不为空,则添加该对象进去
        if (map.get(ddCommentInfo.getPdId())!=null){
            map.get(ddCommentInfo.getPdId()).add(ddCommentInfo);
        }
        log.info("逻辑层--添加评论----商品id="+ddCommentInfo.getPdId());
    }

    /**
     * 删除评论
     * @param ddCommentInfo
     */
    @Override
    @Transactional//开启事务
    public void deleComment(DdCommentInfo ddCommentInfo) {
        ddCommentInfo=ddCommentInfoMapper.selectById(ddCommentInfo);

        //添加状态,false为删除
        ddCommentInfo.setDeleteState(false);
        ddCommentInfoMapper.updateById(ddCommentInfo);

       //更新缓存 条件不为空则执行
        if (map.get(ddCommentInfo.getPdId())!=null){
            //情况key对应的value
            map.remove(ddCommentInfo.getPdId());
            //重新查询数据库进行缓存
            map.put(ddCommentInfo.getPdId(),selectComment(ddCommentInfo));
        }
        log.info("逻辑层--删除评论----商品id="+ddCommentInfo.getPdId());

    }


    HashMap<Integer,List<DdCommentInfo>> map= new HashMap();
    /**
     * 查询评论
     * @param ddCommentInfo
     * @return
     */
    @Override
    public List<DdCommentInfo> selectComment(DdCommentInfo ddCommentInfo) {
        log.info("逻辑层--查询评论----商品id="+ddCommentInfo.getPdId());
        //条件为空进行查新数据库,并添加缓存
        if (map.get(ddCommentInfo.getPdId())==null){
            List<DdCommentInfo> ddCommentInfos = ddCommentInfoMapper.selectComment(ddCommentInfo);
            map.put(ddCommentInfo.getPdId(),ddCommentInfos);
            return ddCommentInfos;
        }else {
            //不为空则直接返回对应的value
            return map.get(ddCommentInfo.getPdId());
        }
    }
}
